#include "plan.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 打印执行计划
// 参数：
// - plan: 要打印的执行计划节点
// - indent: 缩进级别
void print_plan(const PlanNode* plan, int indent) {
    if (!plan) return;
    
    // 打印缩进
    for (int i = 0; i < indent; i++) printf("  ");
    
    // 打印计划节点类型
    switch (plan->type) {
        case PLAN_NODE_CREATE:
            printf("CREATE TABLE\n");
            break;
        case PLAN_NODE_INSERT:
            printf("INSERT\n");
            break;
        case PLAN_NODE_SELECT:
            printf("SELECT\n");
            break;
        case PLAN_NODE_DELETE:
            printf("DELETE\n");
            break;
        case PLAN_NODE_SEQSCAN:
            printf("SEQ SCAN\n");
            break;
        case PLAN_NODE_FILTER:
            printf("FILTER\n");
            break;
        case PLAN_NODE_PROJECT:
            printf("PROJECT\n");
            break;
        default:
            printf("UNKNOWN PLAN TYPE\n");
            break;
    }
    
    // 递归打印子节点
    if (plan->child) {
        print_plan(plan->child, indent + 1);
    }
}

// 释放执行计划资源
// 参数：
// - plan: 要释放的执行计划节点
void free_plan(PlanNode* plan) {
    if (!plan) return;
    
    // 递归释放子节点
    if (plan->child) {
        free_plan(plan->child);
    }
    
    // 释放参数数据（简化版）
    if (plan->params) {
        free(plan->params);
    }
    
    free(plan);
}